package inner;

class OutClass2{
    public int data1 = 1;
    int data2;
    public static int data3;

    public void test(){
        System.out.println("out::test()");
    }

    /**静态内部类
     * 1.如何获取静态内部类对象？
     *      OutClass2.InnerClass2 innerClass2 = new OutClass2.InnerClass2();
     * 2.静态内部类当中 不能访问外部类的非静态类成员 -- 因为外部类的非静态类成员，需要通过外部类的对象的引用才能访问
     *   非要访问---通过引用
     */
    static class InnerClass2{
        public int data4 = 4;
        int data5 = 5;
        public static int data6 = 6;
        // 在内部类中只能访问外部类的静态成员
        // data2 = 100;   编译失败，因为data2不是静态成员变量，普通成员变量需要对象来引用才能访问

        public void func(){
            System.out.println("inner::func()");

            //访问外部类的非静态类成员
           /* System.out.println(data1);
            System.out.println(data2);*/
            OutClass2 outClass2 = new OutClass2();
            System.out.println(outClass2.data1);

            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }
}

class Person{
    public String name = "sy";
    public int age = 18;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test2 {

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        System.out.println(person.age);

        System.out.println(person.toString());

        /*new Person(); // 匿名对象
        System.out.println(new Person().age); // 匿名对象 只能使用一次，下一次使用要重新创建匿名对象
        System.out.println(new Person().name);*/
    }


    public void func(){
        //局部内部类 -- 只能在自己所在的方法体内使用
        class Inner{
            public void test(){
                System.out.println("llllll");
            }
        }
        Inner inner = new Inner();
        inner.test();
    }

    public static void main1(String[] args) {

        OutClass2.InnerClass2 innerClass2 = new OutClass2.InnerClass2();
        innerClass2.func();
    }
}
